class Solution {
    public int[][] generateMatrix(int n) {

        int[][] h = new int[n][n];

        int nd = (int)Math.ceil(n / 2.0); //nd 一共有几圈,控制循环次数
        int x = 0, y = 0, start = 1, t = 1; //x,y 定义每循环一个圈的起始位置；
                                            // start 定义填充数字，从1开始到n的平方；
                                            //t 第几圈
        int i,j;

        while (nd>0){
            // 模拟上侧从左到右
            for (j = y; j < n-t ; j++) {
                h[x][j] = start++;
            }
            // 模拟右侧从上到下
            for (i = x; i < n - t; i++) {
                h[i][j] = start++;
            }
            // 模拟下侧从右到左
            for ( ; j >=t ; j--) {
                h[i][j] = start++;
            }
            // 模拟左侧从下到上
            for ( ; i >= t; i--){
                h[i][j] = start++;
            }
            y++;
            x++;
            t++;

            if(nd == 1 && n%2==1) h[i][j] = start;
            nd--;
        }
        return h;
    }
}